package 代码题.堆排序题目;

import java.util.TreeSet;

/**
 * 使用TreeSet结构找出一组数中第k大的值
 *
 * 本质：TreeSet的底层使用的是sortMap实现。当每次需要堆排序的时候，都可以使用TreeSet数据结构
 */
public class UseTreeSet {

    public static void main(String[] args) {
        int[] arr = new int[]{1, 10, 2, 9, 3, 8, 4, 7, 5, 6};
        int k = 3;
        System.out.println(useTreeSetKmax(arr,k));
    }

    /**
     * treeSet默认从小到大排序，可以修改比较器
     * @param arr
     * @param k
     * @return
     */
    private static int useTreeSetKmax(int[] arr,int k){
        TreeSet<Integer> treeSet=new TreeSet<>();
        for(int value:arr){
            treeSet.add(value);
            if(treeSet.size()>k){
                treeSet.remove(treeSet.first());
            }
        }
        return treeSet.size()<k?treeSet.last():treeSet.first();
    }
}
